<?php
namespace app\admin\controller;

use think\Controller;
use think\Db;
use app\index\model\User;
use app\index\model\Product;
use app\index\model\Order;
use app\index\model\OrderItem;

class Index extends Controller
{
    // 后台管理首页
    public function index()
    {
        // 验证管理员登录状态
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问后台，请先登录管理员账户！', url('adminLogin'));
        }
        return $this->fetch(); // 对应 application/admin/view/index/index.html
    }

    // 后台登录页面
    public function adminLogin()
    {
        return $this->fetch('login'); // 对应 application/admin/view/index/login.html
    }

    // 后台登录校验
    public function logincheck()
    {
        if (request()->isPost()) {
            $username = input('post.username');
            $password = input('post.userpwd');

            $user = User::where('username', $username)->where('role', 'admin')->find();

            if ($user && password_verify($password, $user->password)) {
                \think\Session::set('user_id', $user->id);
                \think\Session::set('username', $user->username);
                \think\Session::set('role', $user->role);

                $this->success('管理员登录成功！', 'index');
            } else {
                $this->error('用户名或密码错误，或您不是管理员！');
            }
        }
        $this->error('非法请求！');
    }

    // 商品列表
    public function productList()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }
        $products = Product::select();
        $this->assign('products', $products);
        return $this->fetch();
    }

    // 新增商品页面及处理
    public function addProduct()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }

        if (request()->isPost()) {
            $pName = input('post.pName');
            $pPrice = input('post.pPrice/f');
            $pDescr = input('post.pDescr');
            $pImg = input('post.pImg');
            $stock = input('post.stock/d', 0);

            if (empty($pName) || empty($pPrice) || empty($pImg)) {
                $this->error('商品名、价格和图片不能为空！');
            }
            if ($pPrice <= 0) {
                $this->error('商品价格必须大于0！');
            }
            if ($stock < 0) {
                $this->error('库存不能为负数！');
            }

            $product = new Product();
            $product->pName = $pName;
            $product->pPrice = $pPrice;
            $product->pDescr = $pDescr;
            $product->pImg = $pImg;
            $product->stock = $stock;
            $product->save();

            $this->success('商品添加成功！', 'productList');
        }

        $uploadDir = ROOT_PATH . 'public' . DS . 'static' . DS . 'upload';
        $files = scandir($uploadDir);
        $this->assign('files', $files);

        return $this->fetch();
    }

    // 修改商品页面及处理
    public function editProduct()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }

        if (request()->isPost()) {
            $pId = input('post.pId/d');
            $pName = input('post.pName');
            $pPrice = input('post.pPrice/f');
            $pDescr = input('post.pDescr');
            $pImg = input('post.pImg');
            $stock = input('post.stock/d');

            $product = Product::get($pId);
            if (!$product) {
                $this->error('商品不存在！');
            }

            if (empty($pName) || empty($pPrice) || empty($pImg)) {
                $this->error('商品名、价格和图片不能为空！');
            }
            if ($pPrice <= 0) {
                $this->error('商品价格必须大于0！');
            }
            if ($stock < 0) {
                $this->error('库存不能为负数！');
            }

            $product->pName = $pName;
            $product->pPrice = $pPrice;
            $product->pDescr = $pDescr;
            $product->pImg = $pImg;
            $product->stock = $stock;
            $product->save();

            $this->success('商品更新成功！', 'productList');
        } else {
            $pId = input('param.pId/d');
            $product = Product::get($pId);
            if (!$product) {
                $this->error('商品不存在！');
            }
            $this->assign('product', $product);

            $uploadDir = ROOT_PATH . 'public' . DS . 'static' . DS . 'upload';
            $files = scandir($uploadDir);
            $this->assign('files', $files);

            return $this->fetch();
        }
    }

    // 用户列表 (已增加新增和编辑管理员链接)
    public function userList()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }
        $users = User::select();
        $this->assign('users', $users);
        return $this->fetch();
    }

    // 新增管理员账户的方法 (新增)
    public function addAdmin()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }

        if (request()->isPost()) {
            $username = input('post.username');
            $password = input('post.password');
            $confirm_password = input('post.confirm_password');
            $user_role = input('post.role', 'member'); // 可以选择添加为member或admin

            if (empty($username) || empty($password) || empty($confirm_password)) {
                $this->error('用户名和密码不能为空！');
            }

            if ($password !== $confirm_password) {
                $this->error('两次输入的密码不一致！');
            }

            // 检查用户名是否已存在
            $existingUser = User::where('username', $username)->find();
            if ($existingUser) {
                $this->error('用户名已存在！');
            }

            $user = new User();
            $user->username = $username;
            $user->password = password_hash($password, PASSWORD_DEFAULT); // 密码加密存储
            $user->role = $user_role; // 设置用户角色
            $user->save();

            $this->success('用户账户添加成功！', 'userList');
        }
        return $this->fetch(); // 对应 application/admin/view/index/addAdmin.html
    }

    // 修改管理员/用户账户和密码的方法 (新增)
    public function editAdmin()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }

        if (request()->isPost()) {
            $user_id = input('post.id/d');
            $username = input('post.username');
            $new_password = input('post.new_password');
            $confirm_new_password = input('post.confirm_new_password');
            $user_role = input('post.role', 'member'); // 可以修改角色

            $user = User::get($user_id);
            if (!$user) {
                $this->error('用户不存在！');
            }

            // 检查用户名是否被其他用户占用 (如果用户名有变化)
            if ($user->username !== $username) {
                $existingUser = User::where('username', $username)->where('id', '<>', $user_id)->find();
                if ($existingUser) {
                    $this->error('新用户名已被其他用户使用！');
                }
            }
            $user->username = $username;

            // 如果新密码字段不为空，则更新密码
            if (!empty($new_password)) {
                if ($new_password !== $confirm_new_password) {
                    $this->error('两次输入的新密码不一致！');
                }
                $user->password = password_hash($new_password, PASSWORD_DEFAULT); // 加密新密码
            }
            
            $user->role = $user_role; // 更新角色

            $user->save();
            $this->success('用户账户信息更新成功！', 'userList');

        } else {
            $user_id = input('param.id/d');
            $user = User::get($user_id);
            if (!$user) {
                $this->error('用户不存在！');
            }
            $this->assign('user', $user);
            return $this->fetch(); // 对应 application/admin/view/index/editAdmin.html
        }
    }

    // 删除用户的方法 (新增)
    public function deleteUser()
    {
        $role = \think\Session::get('role');
        // 确保只有管理员可以删除用户，并且不能删除自己的账户
        $current_user_id = \think\Session::get('user_id');
        if ($role !== 'admin') {
            $this->error('您没有权限执行此操作！', url('adminLogin'));
        }

        $user_id_to_delete = input('param.id/d');
        if ($user_id_to_delete == $current_user_id) {
            $this->error('您不能删除自己的账户！');
        }

        $user = User::get($user_id_to_delete);
        if ($user) {
            $user->delete();
            $this->success('用户账户删除成功！', 'userList');
        } else {
            $this->error('用户账户不存在！');
        }
    }

    // 订单列表
    public function orderList()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }
        $orders = Order::with('user')->select();
        $this->assign('orders', $orders);
        return $this->fetch();
    }

    // 订单详情
    public function orderdetail()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }

        $order_id = input('param.orderId/d');
        if (empty($order_id)) {
            $this->error('订单ID不能为空！');
        }

        $order = Order::where('id', $order_id)
                      ->with(['user', 'orderItems'])
                      ->find();

        if (!$order) {
            $this->error('订单不存在或无法查看！');
        }

        $this->assign('order', $order);
        return $this->fetch();
    }

    // 假设的删除商品方法
    public function deleteProduct()
    {
        $role = \think\Session::get('role');
        if ($role !== 'admin') {
            $this->error('您没有权限访问！', url('adminLogin'));
        }
        $pId = input('param.pId/d');
        $product = Product::get($pId);
        if ($product) {
            $product->delete();
            $this->success('商品删除成功！', 'productList');
        } else {
            $this->error('商品不存在！');
        }
    }

    // 管理员修改密码 (此方法用于当前登录管理员修改自己的密码，与editAdmin不同)
    public function changePassword()
    {
        $role = \think\Session::get('role');
        $user_id = \think\Session::get('user_id');
        if ($role !== 'admin' || !$user_id) {
            $this->error('您没有权限访问此功能，请先登录管理员账户！', url('adminLogin'));
        }

        if (request()->isPost()) {
            $old_password = input('post.old_password');
            $new_password = input('post.new_password');
            $confirm_new_password = input('post.confirm_new_password');

            if (empty($old_password) || empty($new_password) || empty($confirm_new_password)) {
                $this->error('所有密码字段都不能为空！');
            }

            if ($new_password !== $confirm_new_password) {
                $this->error('两次输入的新密码不一致！');
            }

            $admin_user = User::get($user_id);

            if (!$admin_user) {
                $this->error('用户信息异常，请重新登录！');
            }

            if (!password_verify($old_password, $admin_user->password)) {
                $this->error('旧密码不正确！');
            }

            $admin_user->password = password_hash($new_password, PASSWORD_DEFAULT);
            $admin_user->save();

            \think\Session::clear();
            $this->success('密码修改成功，请重新登录！', url('adminLogin'));

        }
        return $this->fetch();
    }
}